/* 
 * GrupoEventoRemoveRule.java
 * 
 * Data de criação: 11/09/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.business.rule.grupo.evento;

import java.util.List;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import br.com.o2solutions.core.exception.BusinessException;
import br.com.o2solutions.core.integration.repository.DataBaseIntegration;
import br.com.o2solutions.core.service.rule.Rule;
import br.com.o2solutions.siso.integration.entidade.Evento;
import br.com.o2solutions.siso.integration.entidade.GrupoEvento;
import br.com.o2solutions.util.assertion.Assert;

/**
 * Classe responsável por verificar, antes da remoção, se o {@link GrupoEvento}
 * está relacionado a algum evento e, caso verdadeiro, impede o processo de
 * remoção.
 * 
 * @author Osvaldeir
 * @since 11/09/2010
 * 
 */
@Component("grupoEventoRemoveRule")
public class GrupoEventoRemoveRule implements Rule<GrupoEvento> {

	@Value("#{eventoDAO}")
	private DataBaseIntegration<Evento> eventoDAO;

	/**
	 * {@inheritDoc}
	 * <p>
	 * Caso GrupoEvento esteja relacionado a algum evento é lançada uma
	 * {@link BusinessException} com a chave
	 * <b>'error.grupo.evento.exists.evento'</b> e informando a impossibilidade
	 * de remoção do {@link GrupoEvento}.
	 * </p>
	 */
	@Override
	public void check(GrupoEvento entity) throws BusinessException {
		List<Evento> eventosVinculados = eventoDAO.findByNamedQuery(
				"Evento.findByGrupoEvento", entity.getId());
		Assert.isEmpty(eventosVinculados, new BusinessException(
				"O Grupo está relacionado a Eventos e não pode ser removido.",
				"error.grupo.evento.exists.evento"));
	}
}
